function getCookie(name) {
    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return r ? r[1] : undefined;
}

function generateUUID() {
    var d = new Date().getTime();
    if(window.performance && typeof window.performance.now === "function"){
        d += performance.now(); //use high-precision timer if available
    }
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = (d + Math.random()*16)%16 | 0;
        d = Math.floor(d/16);
        return (c=='x' ? r : (r&0x3|0x8)).toString(16);
    });
    return uuid;
}
var imageCodeId = ""
var preImageCodeId = ""
// 生成一个图片验证码的编号，并设置页面中图片验证码img标签的src属性
function generateImageCode() {

    imageCodeId = generateUUID()

    var url = '/api/v1.0/imagecode?cur='+imageCodeId +'&pre=' + preImageCodeId

    $(".image-code>img").attr('src',url)
    preImageCodeId = imageCodeId
}

function sendSMSCode() {
    // 校验参数，保证输入框有数据填写
    $(".phonecode-a").removeAttr("onclick");
    var mobile = $("#mobile").val();
    if (!mobile) {
        $("#mobile-err span").html("请填写正确的手机号！");
        $("#mobile-err").show();
        $(".phonecode-a").attr("onclick", "sendSMSCode();");
        return;
    } 
    var imageCode = $("#imagecode").val();
    if (!imageCode) {
        $("#image-code-err span").html("请填写验证码！");
        $("#image-code-err").show();
        $(".phonecode-a").attr("onclick", "sendSMSCode();");
        return;
    }

    // TODO: 通过ajax方式向后端接口发送请求，让后端发送短信验证码
    // 发送短信验证码

    // 组织参数
    var params = {
        "mobile": mobile,
        "image_code": imageCode,
        "image_code_id": imageCodeId
    };

    // 发送ajax请求，请求发送短信验证码
     $.ajax({
        url : "/api/v1.0/smscode",

        type : "post",
        data : JSON.stringify(params),
        headers:{
            'X-CSRFToken':getCookie('csrf_token')
        },
        contentType: "application/json",
        success: function (resp) {
            if (resp.errno == "0") {
                alert(resp.data.sms_code)
                // 发送短信成功，进行倒计时60s
                var num = 60;
                var tid = setInterval(function () {
                    if (num <= 0) {
                        // 倒计时完成
                        // 清除定时器
                        clearInterval(tid);
                        // 重新设置获取短信验证码a标签内容为: 点击获取验证码
                        $(".get_code").html("点击获取验证码");
                        // 为获取短信验证码a标签重新添加点击事件
                        $(".get_code").attr("onclick", "sendSMSCode();");
                    }
                    else {
                        // 倒计时未完成，在页面上显示倒计时剩余秒数
                        $(".get_code").html(num+"秒");
                        // 倒计时剩余秒数-1
                        num -= 1;
                    }
                }, 1000);
            }
            else {
                // 发送短信失败
                // 显示错误信息
                $("#register-sms-code-err").html(resp.errmsg);
                $("#register-sms-code-err").show();
                // 为获取短信验证码a标签重新添加点击事件
                $(".get_code").attr("onclick", "sendSMSCode();");
            }
        },
        error: function (e) {
            // 为获取短信验证码a标签重新添加点击事件
            $(".get_code").attr("onclick", "sendSMSCode();");
        }
    })
}


$(document).ready(function() {
    generateImageCode();  // 生成一个图片验证码的编号，并设置页面中图片验证码img标签的src属性
    $("#mobile").focus(function(){
        $("#mobile-err").hide();
    });
    $("#imagecode").focus(function(){
        $("#image-code-err").hide();
    });
    $("#phonecode").focus(function(){
        $("#phone-code-err").hide();
    });
    $("#password").focus(function(){
        $("#password-err").hide();
        $("#password2-err").hide();
    });
    $("#password2").focus(function(){
        $("#password2-err").hide();
    });

    // TODO: 注册的提交(判断参数是否为空)
})

$(".form-register").submit(function(e){
    // 阻止浏览器对于表单的默认行为，即阻止浏览器把表单的数据转换为表单格式kye=val&key=val的字符串发送到后端
    e.preventDefault();
    var mobile = $("#mobile").val();
    var phoneCode = $("#phonecode").val();
    var password = $("#password").val();
    var password2 = $("#password2").val();
    if (!mobile) {
        $("#mobile-err span").html("请填写正确的手机号！");
        $("#mobile-err").show();
        return;
    }
    if (!phoneCode) {
        $("#phone-code-err span").html("请填写短信验证码！");
        $("#phone-code-err").show();
        return;
    }
    if (!password) {
        $("#password-err span").html("请填写密码!");
        $("#password-err").show();
        return;
    }
    if (password != password2) {
        $("#password2-err span").html("两次密码不一致!");
        $("#password2-err").show();
        return;
    }
    // 将表单中的全部字段值保存到req对象中
    var req = {}

    $(".form-register").serializeArray().map(function (x) {
        req[x.name] = x.value
    })
    // 向后端发送注册请求
    $.ajax({
        url: "/api/v1.0/users",
        type: "post",
        contentType: "application/json",  // 指明发送到后端的数据格式是json
        data: JSON.stringify(req),
        headers: {
            "X-CSRFToken": getCookie("csrf_token") // 后端开启了csrf防护，所以前端发送json数据的时候，需要包含这个请求头
        },
        dataType: "json", // 指明后端返回到前端的数据是json格式的
        success: function(resp){
            if (resp.errno == "0") {
                // 表示注册成功,跳转到主页
                location.href = "/index.html";
            } else if (resp.errno == "4101") {
                // 表示用户注册成功，但是用户的登录状态后端未保存，所以跳转到登录页面
                location.href = "/login.html";
            } else {
                // 在页面中展示错误信息
                $("#password2-err span").html(resp.errmsg);
                $("#password2-err").show();
            }
        }
    });
});